package javaeSE;

//    java 基础
//    ctrl+c 选中当前行
//    alt+c+s+8 try-catch-finally
//    ctrl+d 向下复制一行
//    string 常用 ctrl +r 单文件具体内容替换
public class First {
    //类的静态属性  共用的
    static int a = 10;
    //static final只能在这初始化     称为全局常量
    
    /*
        当类的属性被同时被修饰为static和final的时候，他属于类的资源，static修饰的方法里面不能有 this. xx   super. xx
        那么就是类在被加载进内存的时候（也就是应用程序启动的时候）就要为属性分配内存，所以此时属性已经存在，它又被final修饰，
        所以必须在属性定义了以后就给其初始化值。而构造函数是在当类被实例化的时候才会执行，所以不能用构造函数。而static块是类被加载的时候执行，
        且只执行这一次，所以在static块中可以执行初始化*/
    static final int b = 10;
    final int c ;
    //    final声明的属性必须要初始化，初始化可写在构造器中 代码块中
    public First(){
       this.c = 10;
    }
    
    
    /*  {
        c=10;
    }*/
    public static void main(String[] args) {
        // java的8种基本数据类型 int byte short long float Boolean double int
        // class 数组 接口属于引用数据类型
        // String 比较特殊 是引用数据类型
        String wf = "wf";
        First first = new First();
        First first2 = new First();
        System.out.println(first.a+ " " +first2.a +""+First.a);
        first2.a = 100;
        // 一旦改了其中一个,其他的实例静态属性就会变  js的实例不能调用静态属性 静态方法
        System.out.println(first.a+ " " +first2.a+""+First.a);
        
        first.f(100);
        // 静态方法  实例也能调静态方法   静态方法里面只能调静态属性与其他方法★★★★
        First.f2(1000);
        first.f2(100);
      /*  1. 自动类型提升,当容量小的数据类型的变量与容量大的数据类型的变量做运算时，结果自动提升为容量大的数据类型。
        	byte 、char 、short --> int --> long --> float --> double
        	特别的：当byte、char、short三种类型的变量做运算时，左侧要为int型的变量接收（运算后的类型最低是int防止溢出）
          2. 强制类型转换：语法使用  ()变量
        */

        double d1 = 12.9;
        //精度损失举例1
        int i1 = (int) d1;//截断操作
        System.out.println(i1);//12
        //没有精度损失
        long l1 = 123;
        short s2 = (short) l1;
        //精度损失举例2
        int i2 = 128;
        byte b = (byte) i2;
        System.out.println(b);//-128  127+1=-128
    }


    // final 声明的方法不能 被子类重写 ,final声明的变量不能被修改 ☆☆☆☆
    // final声明的属性必须要初始化，初始化可写在构造器中 代码块中 不能用方法赋值
    // 类的实例方法  必须用实例调用
    public void f(int a) {
        System.out.println("我是java的方法:" + a);
    }

    // 静态方法的声明  多用于 共享属性，比如   国籍 ,利率;
    // 操作静态属性的方法一般都声明为static方法，工具类也是
    public static void f2(int a) {
        System.out.println("我是java类的静态方法:" + a);
    }
 
    
    
}
